(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Yuri Vlasov (wildfish@mail.ru)
Title=alldvd.ru
Description=Import data & picture from ALLDVD.RU
Site=alldvd.ru
Language=RU
Version=1.0 (08.02.2005)
Requires=3.5.0
Comments=
License=
GetInfo=1
[Options]
***************************************************)
program alldvd_ru;
const
BaseAddress = 'http://alldvd.ru/php/';
var
MovieName: string;
//==============================================================================
procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line: string;
TextBlock: string;
BeginPos, EndPos: Integer;
s: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
if pos('РЕЗУЛЬТАТ ПОИСКА', Page.Text) = 0 then
begin
//URL
if CanSetField(fieldURL) then
SetField(fieldURL, Address);
AnalyzeVideoPage(Page);
end
else
begin
PickTreeClear;
LineNr := FindLine('
', Page, 0);
if LineNr > -1 then
begin
PickTreeAdd('Результаты поиска "'+MovieName+'"', '');
AddMoviesTitles(Page, LineNr);
end;
LineNr := FindLine('[1-10] [11-20]', Line);
s := Copy(Line, BeginPos, EndPos - BeginPos);
// PickTreeMoreLink(BaseAddress + s);
PickTreeMoreLink('http://alldvd.ru/php/content.php?group=namedvd&slovo=' + UrlEncode(MovieName) + '&code1=0&page=1');
end;
if PickTreeExec(Address) then
AnalyzePage(Address);
end;
Page.Free;
end;
//==============================================================================
function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
var
i: Integer;
begin
Result := -1;
if StartAt < 0 then
StartAt := 0;
for i := StartAt to List.Count-1 do
if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then
begin
result := i;
Break;
end;
end;
//==============================================================================
procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
var
Line: string;
MovieTitle, MovieAddress, s: string;
StartPos, EndPos: Integer;
begin
repeat
Line := Page.GetString(LineNr);
s := '
';
StartPos := Pos(s, Line);
if StartPos > 0 then
begin
Delete (Line, 1, StartPos + Length(s) - 1);
MovieTitle := Copy(Line, 1, Pos('', Line));
s := '<', Line)-1);
HTMLDecode(MovieTitle);
HTMLRemoveTags(MovieTitle);
PickTreeAdd(MovieTitle, BaseAddress + MovieAddress);
end;
end;
LineNr := LineNr + 1;
until LineNr > Page.Count;
end;
//==============================================================================
function GetText (Line: string; sBegin, sEnd: string): string;
var
BeginPos, EndPos: Integer;
s: string;
begin
Result := '';
BeginPos := Pos(sBegin, Line) + Length(sBegin);
EndPos := Pos(sEnd, Line);
if (BeginPos = 0) then BeginPos := 1;
if (EndPos = 0) then EndPos := Length(Line);
s := Copy(Line, BeginPos, EndPos - BeginPos);
HTMLDecode(s);
HTMLRemoveTags(s);
Result := Trim(s);
end;
//==============================================================================
procedure AnalyzeVideoPage(Page: TStringList);
var
Line, Value, Value2, FullValue: string;
LineNr, MovieLength: Integer;
BeginPos, EndPos: Integer;
MovieName, s, sResult: string;
begin
s := 'DVD интернет-магазин - DVD-диск: ';
LineNr := FindLine(s, Page, 0);
if LineNr = -1 then exit;
// Title
Line := Page.GetString(LineNr);
Delete(Line, 1, Pos(s, Line) + Length(s) - 1);
EndPos := Pos('rus', Line);
if EndPos = 0 then
EndPos := Pos(' / ', Line);
if EndPos = 0 then
EndPos := Length(Line);;
s := Copy(Line, BeginPos, EndPos - BeginPos - 1);
HTMLDecode(s);
HTMLRemoveTags(s);
s := Trim(s);
MovieName := s;
if CanSetField(fieldTranslatedTitle) then
SetField(fieldTranslatedTitle, MovieName);
//Original Title
if CanSetField(fieldOriginalTitle) then
begin
Delete(Line, 1, Length(MovieName) - 1);
BeginPos := Pos('rus', Line) + 3;
EndPos := Pos(' / ', Line) + 3;
if BeginPos < EndPos then
BeginPos := EndPos;
s := Copy(Line, BeginPos, Pos('', Line));
HTMLDecode(s);
HTMLRemoveTags(s);
s := Trim(s);
SetField(fieldOriginalTitle, s);
end;
//Actors
if CanSetField(fieldActors) then
begin
s := 'В ролях:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := Pos(s, Line) + Length(s) - 1;
Delete(Line, 1, BeginPos);
EndPos := Pos('Режиссеры:', Line)-1;
if EndPos = 0 then EndPos := Length(Line);
s := Copy(Line, 1, EndPos);
s := StringReplace(s, '', ',');
HTMLDecode(s);
HTMLRemoveTags(s);
s := Trim(s);
Delete(s, Length(s), Length(s));
SetField(fieldActors, s);
end;
end;
//Director
if CanSetField(fieldDirector) then
begin
s := 'Режиссеры:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := Pos(s, Line) + Length(s) - 1;
Delete(Line, 1, BeginPos);
EndPos := Pos('Жанр:', Line)-1;
if EndPos = 0 then EndPos := Length(Line);
s := Copy(Line, 1, EndPos);
s := StringReplace(s, '', ',');
HTMLDecode(s);
HTMLRemoveTags(s);
s := Trim(s);
if Pos(',', s) = Length(s) then
Delete(s, Length(s), Length(s));
SetField(fieldDirector, s);
end;
end;
//Category
if CanSetField(fieldCategory) then
begin
s := 'Жанр:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := Pos(s, Line) + Length(s) - 1;
Delete(Line, 1, BeginPos);
s := Copy(Line, 1, Length(Line));
sResult := s;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
while (Pos('
', Line) = 0) do
begin
sResult := sResult + ',' + Line;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
HTMLDecode(sResult);
HTMLRemoveTags(sResult);
sResult := Trim(sResult);
SetField(fieldCategory, sResult);
end;
end;
//fieldLanguages
if CanSetField(fieldLanguages) then
begin
s := 'Язык и стандарт звука:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
sResult := '';
while (Pos('Тип диска:', Line)=0) do
begin
EndPos := Pos(' - ', Line)-1;
s := Copy(Line, 1, EndPos);
if sResult = '' then
sResult := sResult + s
else
sResult := sResult + ', ' + s;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
HTMLDecode(sResult);
HTMLRemoveTags(sResult);
sResult := Trim(sResult);
SetField(fieldLanguages, sResult);
end;
end;
//fieldSubtitles
if CanSetField(fieldSubtitles) then
begin
s := 'Язык субтитров:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := Pos(s, Line) + Length(s) - 1;
Delete(Line, 1, BeginPos);
s := Copy(Line, 1, Length(Line));
sResult := s;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
while (Pos('
', Line) = 0) do
begin
sResult := sResult + ', ' + s;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
HTMLDecode(sResult);
HTMLRemoveTags(sResult);
sResult := Trim(sResult);
SetField(fieldSubtitles, sResult);
end;
end;
//fieldLength
if CanSetField(fieldLength) then
begin
s := 'Длительность диска:';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
BeginPos := Pos(s, Line) + Length(s) - 1;
Delete(Line, 1, BeginPos);
EndPos := Pos('мин.', Line)-1;
if EndPos = 0 then EndPos := Length(Line);
s := Copy(Line, 1, EndPos);
HTMLDecode(s);
HTMLRemoveTags(s);
s := Trim(s);
SetField(fieldLength, s);
end;
end;
//fieldDescription
if CanSetField(fieldDescription) then
begin
s := 'Коротко о фильме';
LineNr := FindLine(s, Page, 0);
if LineNr <> -1 then
begin
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
sResult := '';
while (Pos('', Line)=0) do
begin
sResult := sResult + Line;
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
end;
sResult := StringReplace(sResult, '
',#13#10);
sResult := StringReplace(sResult, '
',#13#10);
HTMLDecode(sResult);
HTMLRemoveTags(sResult);
SetField(fieldDescription, sResult);
end;
end;
//Picture
if CanSetPicture then
begin
LineNr := FindLine('